package command;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Iterator;

import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileFilter;

import org.uc3m.ed.factory.panel.FactoriaPanel;
import org.uc3m.ed.implementacion.ComandoUtilizado;
import org.uc3m.ed.implementacion.Command;
import org.uc3m.ed.interfaz_grafica.ventana.PanelDibujo;
import org.uc3m.ed.interfaz_grafica.ventana.VentanaPrincipal;

import tools.FiltroFicheros;

public class CommandGuardarSecuencia implements Command {

	
	
	public void execute() {
		try{
			PanelDibujo panel=FactoriaPanel.metodoFactoria();
			if(panel.getEstructura()!=null)
			{
				BufferedWriter escribir = null; 
				Iterator<ComandoUtilizado> it=null;
				String comandos=new String();
				File fichero;
				VentanaPrincipal.getConsola().limpiarConsola();
				FileFilter filtro= new FiltroFicheros("Ficheros de comandos(*.ccc)", ".ccc");
				JFileChooser selectorDeFichero = new JFileChooser("."+File.separatorChar+"DEI_ED"+File.separatorChar+"Test");
				
				selectorDeFichero.addChoosableFileFilter(filtro);
				
				if(JFileChooser.APPROVE_OPTION==selectorDeFichero.showSaveDialog(VentanaPrincipal.getFrame()))
				{
					it = panel.getPilaComandos().iterator();
					while(it.hasNext())
						comandos+=it.next().toString()+"\n";
					try {
						fichero=selectorDeFichero.getSelectedFile();
						
						if(!fichero.getCanonicalPath().endsWith(".ccc"))
							fichero= new File(fichero.getCanonicalPath()+".ccc");
				
						escribir= new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fichero)));
						escribir.write(comandos);
						escribir.close();
						JOptionPane.showMessageDialog(VentanaPrincipal.getFrame(), "Guardado Correcto","Informacion" ,JOptionPane.INFORMATION_MESSAGE );
						
					} catch (FileNotFoundException e) {
						VentanaPrincipal.getConsola().escribirTextoError("CLASS::ColaCircular::CommandGuardarSecuencia ERROR::3\n   Fichero no encontrado: "+e.getMessage());
					} catch (IOException e) {
						VentanaPrincipal.getConsola().escribirTextoError("CLASS::ColaCircular::CommandGuardarSecuencia ERROR::4\n   Error en la escritura del fichero");
					}
				}
			}else
				VentanaPrincipal.getConsola().escribirTextoError("CLASS::ColaCircular::CommandGuardarSecuencia ERROR::5\n   Debes crear una Cola Circular antes de Guardar una secuencia");
			
		}catch(Exception e){
			VentanaPrincipal.getConsola().escribirTextoError("CLASS::ColaCircular::CommandGuardarSecuencia ERROR::1::"+e.toString()+"\n",e.getStackTrace());
		}catch(Error e){
			VentanaPrincipal.getConsola().escribirTextoError("CLASS::ColaCircular::CommandGuardarSecuencia ERROR::2::"+e.toString()+"\n",e.getStackTrace());
		}
		
		
	}

}
